//
// Description: 整页拍
// Created by Loading on 2021/3/18.
//

// 输入三个矩形框，判断第一个能否被第二个和第三个完全覆盖

// Input
// 共三行，分别代表三个矩形框，判断第一行的矩形框能否被第二、三行框覆盖
// 第一行四个整数x1, y1,x2,y2,代表第一个框左下角和右上角的点
// 第二行四个整数x3, y3,x4,y4,代表第二个框左下角和右上角的点
// 第三行四个整数x5, y5,x6,y6,代表第三个框左下角和右上角的点
// 其中，所有坐标为不大于10^6的自然数

// Output
// 共一行，YES/NO
// 判断输入中第一个框能否被第二个框和第三个框完全覆盖，不会被完全覆盖输出YES，可以被完全覆盖输出NO

// Sample Input
// 3 3 5 5
// 2 2 4 6
// 4 2 6 6
//
// Sample Output
// NO

// Sample Input
// 0 0 1000 1000
// 0 0 499 1000
// 500 0 1000 1000
//
// Sample Output
// YES


//#include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

double x1, y1, x2, y2;

//判断是否能直接被一个矩形覆盖
bool solveOne(vector<pair<double, double>> &vec) {
    bool flag = false;
    for (auto &p : vec) {
        if (p.first <= x1 && p.second <= y1) {//覆盖左下角坐标
            flag = true;
            break;
        }
    }

    if (!flag) {
        return false;
    }
    flag = false;

    for (auto &p : vec) {
        if (p.first <= x1 && p.second >= y2) {//覆盖左上角坐标
            flag = true;
            break;
        }
    }

    if (!flag) {
        return false;
    }
    flag = false;

    for (auto &p : vec) {
        if (p.first >= x2 && p.second <= y1) {//覆盖右下角坐标
            flag = true;
            break;
        }
    }

    if (!flag) {
        return false;
    }
    flag = false;

    for (auto &p : vec) {
        if (p.first >= x2 && p.second >= y2) {//覆盖右上角坐标
            flag = true;
            break;
        }
    }

    if (!flag) {
        return false;
    }

    return true;
}

int main() {
    vector<pair<double, double>> vec(8);
    cin >> x1 >> y1 >> x2 >> y2;

    double x3, y3, x4, y4, x5, y5, x6, y6;
    cin >> x3 >> y3 >> x4 >> y4 >> x5 >> y5 >> x6 >> y6;

    vec[0] = {x3, y3};
    vec[1] = {x3, y4};
    vec[2] = {x4, y3};
    vec[3] = {x4, y4};
    vec[4] = {x5, y5};
    vec[5] = {x5, y6};
    vec[6] = {x6, y5};
    vec[7] = {x6, y6};

    vector<pair<double, double>> v1(vec.begin(), vec.begin() + 4);
    vector<pair<double, double>> v2(vec.begin() + 4, vec.end());
    if (solveOne(v1) || solveOne(v2)) {//被两个矩形中的任意一个直接覆盖
        cout << "NO" << endl;
        return 0;
    }

    if (!solveOne(vec)) {//被两个矩形的组合覆盖
        cout << "YES" << endl;
        return 0;
    }

    if (x4 < x5 || x6 < x3) {//两个矩形在X轴方向上存在空隙
        cout << "YES" << endl;
        return 0;
    }
    if (y4 < y5 || y6 < y3) {//两个矩形在Y轴方向上存在空隙
        cout << "YES" << endl;
        return 0;
    }

    cout << "NO" << endl;
}